package com.employment.dao;

import com.mybatisflex.core.BaseMapper;
import com.employment.entity.ChatParticipant;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 会话参与者Mapper接口
 * 
 * @author Employment System
 * @since 1.0.0
 */
@Mapper
public interface ChatParticipantMapper extends BaseMapper<ChatParticipant> {

    /**
     * 查询会话的参与者列表
     *
     * @param conversationId 会话ID
     * @return 参与者列表
     */
    List<ChatParticipant> selectByConversationId(@Param("conversationId") Long conversationId);

    /**
     * 查询用户参与的会话ID列表
     *
     * @param userId 用户ID
     * @return 会话ID列表
     */
    List<Long> selectConversationIdsByUserId(@Param("userId") Long userId);

    /**
     * 检查用户是否在会话中
     *
     * @param conversationId 会话ID
     * @param userId         用户ID
     * @return 参与者信息
     */
    ChatParticipant selectByConversationAndUser(@Param("conversationId") Long conversationId,
                                               @Param("userId") Long userId);

    /**
     * 更新最后阅读时间和消息
     *
     * @param conversationId    会话ID
     * @param userId            用户ID
     * @param lastReadMessageId 最后阅读消息ID
     * @return 更新结果
     */
    int updateLastRead(@Param("conversationId") Long conversationId,
                      @Param("userId") Long userId,
                      @Param("lastReadMessageId") Long lastReadMessageId);

    /**
     * 设置免打扰状态
     *
     * @param conversationId 会话ID
     * @param userId         用户ID
     * @param isMuted        是否免打扰
     * @return 更新结果
     */
    int updateMuteStatus(@Param("conversationId") Long conversationId,
                        @Param("userId") Long userId,
                        @Param("isMuted") Integer isMuted);

    /**
     * 设置置顶状态
     *
     * @param conversationId 会话ID
     * @param userId         用户ID
     * @param isTop          是否置顶
     * @return 更新结果
     */
    int updateTopStatus(@Param("conversationId") Long conversationId,
                       @Param("userId") Long userId,
                       @Param("isTop") Integer isTop);

    /**
     * 退出会话
     *
     * @param conversationId 会话ID
     * @param userId         用户ID
     * @return 更新结果
     */
    int leaveConversation(@Param("conversationId") Long conversationId,
                         @Param("userId") Long userId);

    /**
     * 删除会话的所有参与者
     *
     * @param conversationId 会话ID
     * @return 删除结果
     */
    int deleteByConversationId(@Param("conversationId") Long conversationId);
}